package com.lagou.com.lagou.homework.Modules3.item5;

import java.util.*;

/**
 * 5. 编程题
 *
 *  使用集合实现斗地主游戏的部分功能，要求如下：
 *
 *  （1）首先准备 54 张扑克牌并打乱顺序。
 *
 *  （2）由三个玩家交替摸牌，每人 17 张扑克牌，最后三张留作底牌。
 *
 *  （3）查看三个玩家手中的扑克牌和底牌。
 *
 *  （4）其中玩家手中的扑克牌需要按照大小顺序打印，规则如下：
 *
 *     手中扑克牌从大到小的摆放顺序：大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3
 */
public class Puker {

    //按照顺序显示三个玩家的牌和底牌
    public static void show(Integer[] ir1,Integer[] ir2,Integer[] ir3,Integer[] iroy3,Map m1){
        System.out.println("玩家甲牌为：");
        for (int i = 0; i < 17; i++) {
            Arrays.sort(ir1);//排序数组ir1
            System.out.print(m1.get(ir1[i]) + " ");//对应排序的K，get出Map集合的value
        }
        System.out.println();
        System.out.println("玩家乙牌为：");
        for (int i = 0; i < 17; i++) {
            Arrays.sort(ir2);
            System.out.print(m1.get(ir2[i]) + " ");
        }
        System.out.println();
        System.out.println("玩家丙牌为：");
        for (int i = 0; i < 17; i++) {
            Arrays.sort(ir3);
            System.out.print(m1.get(ir3[i]) + " ");
        }
        System.out.println();
        System.out.println("底牌为：");
        for (int i = 0; i < 3; i++) {
            Arrays.sort(iroy3);
            System.out.print(m1.get(iroy3[i]) + " ");
        }

    }
    //发牌，对三取余分三个玩家
    public static void deal(Integer[] ir1,Integer[] ir2,Integer[] ir3,Integer[] iroy3, List<Integer> m1key){
        int num = 0;
        int i1 = 0;
        int i2 = 0;
        int i3 = 0;
        int i4 = 0;
        while (num <= 53) {
            if (num > 50){//底牌三张
                iroy3[i4] = m1key.get(num);
                i4++;
            }else if (num % 3 == 0){
                ir1[i1] = m1key.get(num);
                i1++;
            }else if(num % 3 == 1){
                ir2[i2] = m1key.get(num);
                i2++;
            }else{
                ir3[i3] = m1key.get(num);
                i3++;
            }
            num++;
        }
    }
    public static void main(String[] args) {
        List<String> lt1 = Arrays.asList("♠", "❤", "♣", "♦");
        List<String> lt2 = Arrays.asList("2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3");
        //初始化三个玩家和三个底牌的数组
        Integer[] ir1 = new Integer[17];
        Integer[] ir2 = new Integer[17];
        Integer[] ir3 = new Integer[17];
        Integer[] iroy3 = new Integer[3];

        Map<Integer,String> m1 = new HashMap<>();//创建所有牌的集合
        //加入大小王
        m1.put(1,"BKing👑");
        m1.put(2,"LKing👑");

        int n = 3;//从3开始，1.2是大小王
        //拼接牌与花形
        for (int i = 0; i < 13; i++) {
            for (int j = 0; j < 4; j++) {
                String slt1 = lt1.get(j);//get 出元素
                String slt2 = lt2.get(i);
                //String s = n + "";
                m1.put(n,slt2+slt1);//拼接并加入Map集合
                n++;
            }
        }
        //利用Map的键值创建个List集合，键值对应牌型，并使用shuffle打乱
        List<Integer> m1key = new ArrayList<>(m1.keySet());
        Collections.shuffle(m1key);
        //发牌
        deal(ir1,ir2,ir3,iroy3,m1key);
        //打印显示
        show(ir1,ir2,ir3,iroy3,m1);

    }

}

